#ifndef FHE_PYTHON_PYCALL_H
#define FHE_PYTHON_PYCALL_H

#include <fhe/core/IFunc.h>
#include <boost/python.hpp>
#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>

namespace fhe
{
  using namespace core;
  namespace python
  {
    class FHE_API PyCall
    {
    public:
      PyCall( const IFunc::Ptr& func );
      
      #define CALL_iter( z, n, unused ) \
        boost::python::object BOOST_PP_CAT( call, n )( BOOST_PP_ENUM_PARAMS( n, boost::python::object a ) );
        
      BOOST_PP_REPEAT( FHE_ARGS, CALL_iter, ~ )
      
      #undef CALL_iter
      
      static boost::python::object define();
      
    private:
      IFunc::Ptr func_;
    };
  }
}

#endif
